seite.php - standardseite


P H P   -   Personal Home Page

8.   ordner und dateien

8.9  zeichensatz für datei-ein/ausgabe

Bei der darstellung von geschlossenen umlauten und einigen sonderzeichen (€, §, °, ², ³, µ) gibt es oft probleme. Im sog. Unicode (utf-8) sind diese zeichen mit zwei bytes verschlüsselt. Man vermeidet probleme mit diesen zeichen, wenn man sicherstellt, dass der zeichensatz mit dem eine seite erstellt wurde der gleiche ist, der im header der seite vereinbart wird. Die HTML- beschreibung enthält dazu details (siehe dort ziffer 2.5). Wenn es sich um den zeichensatz Unicode handelt, wird eine ausgabe-datei mit diesem zeichensatz erstellt und eine eingabe-datei wird problemlos verarbeitet, wenn sie ebenfalls im Unicode erstellt wurde. Wurde die eingabe-datei mit Ansicode erstellt, gibt es probleme. Wenn konsequent überall mit Ansicode gearbeitet wird, sollte es eigentlich keine probleme geben, aber leider stimmt das nicht (mehr), weil viele provider, bei denen man eine homepage hostet, diesen code sehr häßlich behandeln.

Das nachstehende beispiel zeigt die darstellung von zwei inhaltlich gleichen eingabe-dateien, von denen die erste im Ansicode und die zweite im Unicode erstellt wurde. Die dateien sind einfache textdateien mit zeilenende-zeichen und werden mit fgets eingelesen. Bei der Ansicode-datei können die geschlossenen umlaute und die o.g. sonderzeichen nicht dargestellt werden. Das beispiel zeigt noch mehr: maskierte zeichen werden immer richtig dargestellt und das tabulator-zeichen wird durch zwischenraum ersetzt, bewirkt aber sonst nichts. Das gilt für alle steuerzeichen.

inhalt der datei

diese datei ist mit dem zeichensatz Ansicode erstellt
und enthält sonderzeichen und umlaute
! $ % & / ( ) = ? @ + - #
Ä Ö Ü ä ö ü € § ° ² ³ µ
maskiert: Ä ä €
mit tabulator: tab ÄÖÜäöü ABC XYZ

inhalt der datei

diese datei ist mit dem zeichensatz Unicode erstellt
und enthält sonderzeichen und umlaute
! $ % & / ( ) = ? @ + - #
Ä Ö Ü ä ö ü € § ° ² ³ µ
maskiert: Ä ä €
mit tabulator: ÄÖÜäöü ABC XYZ

Im einfachsten fall behebt man das problem, indem man die eingabedatei mit hilfe eines geeigneten editors von Ansicode in Unicode umcodiert. Aber wenn das nicht möglich ist oder die seite aus welchen gründen auch immer eine seite eingaben sowohl in Unicode wie in Ansicode verabeiten soll, dann beginnt eine arge bastelei. Das folgende beispiel zeigt das.

 

beispiel
Die dateien werden wie zuvor mit fgets eingelesen und dann zeilenweise mit der funktion UMSETZ umcodiert. Wenn umlaute und die o.g. sonderzeichen im Ansicode codiert sind werden sie durch die entsprechenden 2-byte-zeichen des Unicode ersetzt. Liegen die zeichen im Unicode vor, wird das erste byte abgeschnitten und dann das passende zeichen im Unicode eingefügt (das scheint umständlich, vereinfacht aber die prozedur). Alle steuerzeichen werden unterdrückt, mit ausnahme des tabulator-zeichens, das so durch geschützte leerzeichen ersetzt wird, dass nachfolgender text auf die positionen 8, 16, 24 usw. kommt.

inhalt der datei

diese datei ist mit dem zeichensatz Ansicode erstellt
und enthält sonderzeichen und umlaute
! $ % & / ( ) = ? @ + - #
Ä Ö Ü ä ö ü € § ° ² ³ µ
maskiert: Ä ä €
mit tabulator:   tab      Ã„ÖÜäöü     ABC      XYZ

inhalt der datei

diese datei ist mit dem zeichensatz Unicode erstellt
und enthält sonderzeichen und umlaute
! $ % & / ( ) = ? @ + - #
Ä Ö Ü ä ö ü € § ° ² ³ µ
maskiert: Ä ä €
mit tabulator:   Ã„ÖÜäöü     ABC      XYZ


zum untermenü


    IMPRESSUM  

    KONTAKT  

    PRIVAT  

    D O K U  


  H T M L  
  C S S  
  p h p
  My S Q L  
  JAVASCRIPT